home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / Libraries / PlayerPRO 4.4.1 / MADF Library 3.0 / Example.c < prev    next >
C/C++ Source or Header  |  1995-04-18  |  5KB  |  231 lines

  1. /********************************************************/
  2. /*
  3.     Player PRO 4.4 -- Music Driver EXAMPLE
  4.  
  5.     Library Version 3.0
  6.  
  7.     To use with MusicLibrary 3.0 for Think C & CodeWarrior
  8.  
  9.     Antoine ROSSET
  10.     16 Tranchees
  11.     1206 GENEVA
  12.     SWITZERLAND
  13.     
  14.     FAX: (41 22) 346 11 97
  15.     Compuserve: 100277,164
  16.     Internet: rosset@dial.eunet.ch
  17. */
  18. /********************************************************/
  19.  
  20. #include "MAD.h"
  21. #include "RDriver.h"
  22. #include "gestaltequ.h"
  23. #include "sound.h"
  24.  
  25. static     Boolean        Stereo, StereoMixing, NewSoundManager, hasASC;
  26.  
  27. main()
  28. {
  29. long            gestaltAnswer, sndSize, tL;
  30. short            myBit, iFileRefI, x, i;
  31. NumVersion        nVers;
  32. Point            where = { -1, -1};
  33. SFReply            reply;
  34. SFTypeList        aType;
  35. OSErr            iErr = noErr;
  36. Ptr                tempPtr;
  37. MADPartition    aPartition;
  38. Boolean            End;
  39.  
  40. /***************                    ****************/
  41. /******          Toolbox Initialization      **********/
  42. /***************                    ****************/
  43.  
  44.  
  45. InitGraf( &qd.thePort);
  46. InitFonts();
  47. FlushEvents(everyEvent,0);
  48. InitWindows();
  49. TEInit();
  50. InitMenus();
  51. InitCursor();
  52. MaxApplZone();
  53.  
  54. /***************                    ****************/
  55. /****** HARDWARE IDENTIFICATION AND CHECK **********/
  56. /***************                    ****************/
  57.  
  58. /****************/
  59. /** ASC CHIP ? **/
  60. /****************/
  61.  
  62. Gestalt( gestaltHardwareAttr, &gestaltAnswer);
  63. myBit = gestaltHasASC;
  64. if( BitTst( &gestaltAnswer, 31-myBit) == false) hasASC = false;
  65. else hasASC = true;
  66.  
  67. /**************/
  68. /** STEREO ? **/
  69. /**************/
  70.  
  71. Gestalt( gestaltSoundAttr, &gestaltAnswer);
  72. myBit = gestaltStereoCapability;
  73. Stereo = BitTst( &gestaltAnswer, 31-myBit);
  74.  
  75. /*********************/
  76. /** STEREO MIXING ? **/
  77. /*********************/
  78.  
  79. myBit = gestaltStereoMixing;
  80. StereoMixing = BitTst( &gestaltAnswer, 31-myBit);
  81.  
  82. /****************************/
  83. /** SOUND MANAGER >= 3.0 ? **/
  84. /****************************/
  85.  
  86. nVers = SndSoundManagerVersion();
  87. if( nVers.majorRev >= 3) NewSoundManager = true;
  88. else NewSoundManager = false;
  89.  
  90. /****************************************************/
  91. /****************************************************/
  92.  
  93. /*******************************************************************************************/
  94. /****** MAD Library Initialisation : choose the best driver for the current hardware ******/
  95. /******                                                                                  ******/
  96. /****** Standard initialization with 4 tracks...                                      ******/
  97. /*******************************************************************************************/
  98. PtrSystem = false;
  99. if( Stereo == true && StereoMixing == true)
  100. {        
  101.     if( NewSoundManager == true)
  102.     {
  103.         if( RInitMusic( SMStereo, 4, false) != noErr) ExitToShell();
  104.     }
  105.     else if( hasASC == true)
  106.     {
  107.         if( RInitMusic( ASCStereo, 4, false) != noErr) ExitToShell();
  108.     }
  109.     else if( RInitMusic( SMDSP, 4, false) != noErr) ExitToShell();
  110. }
  111. else
  112. {        
  113.     if( NewSoundManager == true)
  114.     {
  115.         if( RInitMusic( SMMono, 4, false) != noErr) ExitToShell();
  116.     }
  117.     else if( hasASC == true)
  118.     {
  119.         if( RInitMusic( ASCMono, 4, false) != noErr) ExitToShell();
  120.     }
  121.     else DebugStr("\pNo Driver for your Mac!");
  122. }
  123.  
  124. /*********************************/
  125. /*********************************/
  126. /*********************************/
  127.  
  128. /****** Choose a MAD ('MADF') or a MODs ('STrk') File ********/
  129. End = false;
  130.  
  131. while( End == false)
  132. {
  133.     FlushEvents( everyEvent, 0);
  134.     aType[ 0] = 'MADF';
  135.     aType[ 1] = 'STrk';
  136.     SFGetFile( where, "\p", 0L, 2, aType, 0L, &reply);
  137.     
  138.     if( !reply.good) End = true;
  139.     else
  140.     {
  141.         SetVol( 0L, reply.vRefNum);
  142.         
  143.         if( reply.fType == 'STrk')            // **** MOD File ****
  144.         {
  145.             iErr = FSOpen( reply.fName, 0, &iFileRefI);
  146.             if( iErr) DebugStr( "\pProblemo ??");
  147.             
  148.             GetEOF( iFileRefI, &sndSize);
  149.             
  150.             tempPtr = NewPtr( sndSize);
  151.             FSRead( iFileRefI, &sndSize, tempPtr);
  152.             FSClose( iFileRefI);
  153.                 
  154.             ConvertMod2Mad( tempPtr, sndSize, &aPartition);
  155.             RInstallMADF( aPartition);
  156.             
  157.             DisposPtr( tempPtr);    tempPtr = 0L;
  158.         }
  159.         else if( reply.fType == 'MADF')     // **** MAD File ****
  160.         {
  161.             /*** To load a MAD File *********/
  162.             if( RLoadMusic( reply.fName) != noErr) Debugger();
  163.             
  164.             /*
  165.                 *** TO OPEN A MAD RESOURCE ***
  166.                 
  167.                 To create a MAD Resource, use Auto-Exec export from Player PRO !!!!
  168.                 And load the resource with: by example...
  169.             
  170.                 RLoadMusicRsrc( 'MADF', 3124); for example...
  171.             */
  172.         }
  173.         else DebugStr("\pUh Uh...");
  174.         
  175.         
  176.         /****************************************/
  177.         /**** Update the tracks number !! *******/
  178.         /****************************************/
  179.         if( theFileInt->Tracks != DriveTrackNo)
  180.         {
  181.             DriveTrackNo = theFileInt->Tracks;
  182.             ChangeTrackNo( DriveTrackNo);
  183.         }
  184.         /****************************************/
  185.         
  186.         /****/
  187.         // Set all track volumes to 0
  188.         
  189.         for( i = 0; i < MAXTRACK; i++)VolExt[ i] = 0;
  190.         
  191.         RPlayMusic();
  192.         Reading = true;
  193.  
  194.         /****/
  195.         // Increase slowly the volume
  196.         
  197.         for( x = 0; x <= 64; x++)
  198.         {
  199.             for( i = 0; i < MAXTRACK; i++) VolExt[ i] = x;
  200.             Delay( 1, &tL);
  201.         }
  202.     
  203.         while( !Button())
  204.         {
  205.             /** Do what you want here....    **/
  206.             /** Bla bla...                    **/
  207.         }
  208.         
  209.         /****/
  210.         // Decrease slowly the volume
  211.         
  212.         for( x = 64; x >= 0; x--)
  213.         {
  214.             for( i = 0; i < MAXTRACK; i++) VolExt[ i] = x;
  215.             Delay( 1, &tL);
  216.         }
  217.  
  218.         
  219.         Reading = false;
  220.         RStopMusic();            // Stop music
  221.         
  222.         CleanDriver();
  223.         
  224.         RClearMusic();            // Dispose the current music
  225.     }
  226. }
  227. RQuitMusic();            // Dispose music driver
  228.  
  229. FlushEvents( everyEvent, 0);
  230. ExitToShell();
  231. }